#include <iostream>
#include <ctime>
#include <vector>
using namespace std;

//////////debug/////////////
void PrintLog()
{
    cout << "我是一个打印日志的任务" << endl;
}

void DownLoad()
{
    cout << "我是一个下载的任务" << endl;
}

void UpLoad()
{
    cout << "我是一个上传的任务" << endl;
}
///////////////////////////////

// 管理函数方法的指针，可以通过这个指针调用任务要用的方法
typedef void (*task_t)();

// 管理任务的类
class TaskManager
{
public:
    TaskManager()
    {
        // 生成随机数种子
        srand(time(nullptr));
    }

    ~TaskManager() {}

    // 注册任务的方法
    // （也就是把任务插入进去，使得vector中的对应位置的函数指针指向这个任务方法）
    void Register(task_t t)
    {
        _tasks.push_back(t);
    }

    // 返回随机选择的任务
    int Code()
    {
        return rand() % _tasks.size();
    }

    // 执行该任务的方法
    void Execute(int code)
    {
        if (code >= 0 && code < _tasks.size())
        {
            // 用函数指针调用该函数方法
            _tasks[code]();
        }
    }

private:
    vector<task_t> _tasks;
};